/*******************************************************************************
*funtion: 
*date	:	
*author	:
*modify	:
*note	:
*******************************************************************************/
#pragma once

#include "DevicePlugin.h"
#include "Poco/ClassLoader.h"
#include "Poco/Manifest.h"
#include "Poco/Path.h"

#include <string>
#include <map>

using namespace std;

using Poco::ClassLoader;
using Poco::Manifest;
using Poco::SharedLibrary;
using Poco::Path;


class Plugin_API PluginMgr
{
private:
	typedef ClassLoader<DevicePlugin> PluginLoader;
	typedef std::auto_ptr<PluginLoader>	PPluginLoader;
	typedef map<std::string,PPluginLoader> PluginMap;
	typedef PluginMap::iterator PluginMapIt;
public:
	PluginMgr();
    ~PluginMgr();
	static PluginMgr& instance();
	int load(Path& path,PPluginLoader loader);
	int unload(const std::string& name,PPluginLoader loader);
	int get(std::string& name,DevicePlugin* &pPlugin);
public:
    int init(std::string& dir);
    int fini();
private:
	PluginLoader m_Loader;
	PluginMap    m_PluginMap;
	std::string  m_DirPath;
};



